package api

import (
	"errors"
	"gitee.com/ling1314/origin-utility/constant"
	"gitee.com/ling1314/origin-utility/utils"
	"github.com/gin-gonic/gin"
	"net/http"
)

func Ok204(c *gin.Context) {
	c.AbortWithStatus(http.StatusNoContent)
}

func Ok(c *gin.Context, data interface{}) {
	c.PureJSON(http.StatusOK, data)
}

// BadWithCode 发生错误，但是没有数据需要返回时的响应函数
func BadWithCode(c *gin.Context, code gin.ErrorType) {
	c.Error(&gin.Error{Err: errors.New(constant.ErrorMap[code]), Type: code}) // nolint
	c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"code": code, "msg": constant.ErrorMap[code]})
}

func BadWithError(c *gin.Context, err error) {
	c.Error(&gin.Error{Err: err, Type: constant.ErrorUnknown}) // nolint
	c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"code": constant.ErrorUnknown, "msg": err.Error()})
}

// todo 应该设计一个工具方法，传入err 直接返回 BadWithCode 的内容，但是要枚举 gin 和 gorm中的 error有点费事
//func BadWithErr(c *gin.Context,err error)  {
//	switch err {
//
//}

//GetCurrentUser 获取当前用户
func GetCurrentUser(c *gin.Context) *utils.CustomClaims {
	v := c.Value("claims").(*utils.CustomClaims)
	return v
}
